home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / python2.4 / idlelib / StackViewer.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2005-10-18  |  5KB  |  177 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.4)
  3.  
  4. import os
  5. import sys
  6. import linecache
  7. from TreeWidget import TreeNode, TreeItem, ScrolledCanvas
  8. from ObjectBrowser import ObjectTreeItem, make_objecttreeitem
  9.  
  10. def StackBrowser(root, flist = None, tb = None, top = None):
  11.     if top is None:
  12.         Toplevel = Toplevel
  13.         import Tkinter
  14.         top = Toplevel(root)
  15.     
  16.     sc = ScrolledCanvas(top, bg = 'white', highlightthickness = 0)
  17.     sc.frame.pack(expand = 1, fill = 'both')
  18.     item = StackTreeItem(flist, tb)
  19.     node = TreeNode(sc.canvas, None, item)
  20.     node.expand()
  21.  
  22.  
  23. class StackTreeItem(TreeItem):
  24.     
  25.     def __init__(self, flist = None, tb = None):
  26.         self.flist = flist
  27.         self.stack = self.get_stack(tb)
  28.         self.text = self.get_exception()
  29.  
  30.     
  31.     def get_stack(self, tb):
  32.         if tb is None:
  33.             tb = sys.last_traceback
  34.         
  35.         stack = []
  36.         if tb and tb.tb_frame is None:
  37.             tb = tb.tb_next
  38.         
  39.         while tb is not None:
  40.             stack.append((tb.tb_frame, tb.tb_lineno))
  41.             tb = tb.tb_next
  42.         return stack
  43.  
  44.     
  45.     def get_exception(self):
  46.         type = sys.last_type
  47.         value = sys.last_value
  48.         if hasattr(type, '__name__'):
  49.             type = type.__name__
  50.         
  51.         s = str(type)
  52.         if value is not None:
  53.             s = s + ': ' + str(value)
  54.         
  55.         return s
  56.  
  57.     
  58.     def GetText(self):
  59.         return self.text
  60.  
  61.     
  62.     def GetSubList(self):
  63.         sublist = []
  64.         for info in self.stack:
  65.             item = FrameTreeItem(info, self.flist)
  66.             sublist.append(item)
  67.         
  68.         return sublist
  69.  
  70.  
  71.  
  72. class FrameTreeItem(TreeItem):
  73.     
  74.     def __init__(self, info, flist):
  75.         self.info = info
  76.         self.flist = flist
  77.  
  78.     
  79.     def GetText(self):
  80.         (frame, lineno) = self.info
  81.         
  82.         try:
  83.             modname = frame.f_globals['__name__']
  84.         except:
  85.             modname = '?'
  86.  
  87.         code = frame.f_code
  88.         filename = code.co_filename
  89.         funcname = code.co_name
  90.         sourceline = linecache.getline(filename, lineno)
  91.         sourceline = sourceline.strip()
  92.         if funcname in ('?', '', None):
  93.             item = '%s, line %d: %s' % (modname, lineno, sourceline)
  94.         else:
  95.             item = '%s.%s(...), line %d: %s' % (modname, funcname, lineno, sourceline)
  96.         return item
  97.  
  98.     
  99.     def GetSubList(self):
  100.         (frame, lineno) = self.info
  101.         sublist = []
  102.         if frame.f_globals is not frame.f_locals:
  103.             item = VariablesTreeItem('<locals>', frame.f_locals, self.flist)
  104.             sublist.append(item)
  105.         
  106.         item = VariablesTreeItem('<globals>', frame.f_globals, self.flist)
  107.         sublist.append(item)
  108.         return sublist
  109.  
  110.     
  111.     def OnDoubleClick(self):
  112.         if self.flist:
  113.             (frame, lineno) = self.info
  114.             filename = frame.f_code.co_filename
  115.             if os.path.isfile(filename):
  116.                 self.flist.gotofileline(filename, lineno)
  117.             
  118.         
  119.  
  120.  
  121.  
  122. class VariablesTreeItem(ObjectTreeItem):
  123.     
  124.     def GetText(self):
  125.         return self.labeltext
  126.  
  127.     
  128.     def GetLabelText(self):
  129.         pass
  130.  
  131.     
  132.     def IsExpandable(self):
  133.         return len(self.object) > 0
  134.  
  135.     
  136.     def keys(self):
  137.         return self.object.keys()
  138.  
  139.     
  140.     def GetSubList(self):
  141.         sublist = []
  142.         for key in self.keys():
  143.             
  144.             try:
  145.                 value = self.object[key]
  146.             except KeyError:
  147.                 continue
  148.  
  149.             
  150.             def setfunction(value, key = key, object = self.object):
  151.                 object[key] = value
  152.  
  153.             item = make_objecttreeitem(key + ' =', value, setfunction)
  154.             sublist.append(item)
  155.         
  156.         return sublist
  157.  
  158.  
  159.  
  160. def _test():
  161.     
  162.     try:
  163.         import testcode as testcode
  164.         reload(testcode)
  165.     except:
  166.         (sys.last_type, sys.last_value, sys.last_traceback) = sys.exc_info()
  167.  
  168.     Tk = Tk
  169.     import Tkinter
  170.     root = Tk()
  171.     StackBrowser(None, top = root)
  172.     root.mainloop()
  173.  
  174. if __name__ == '__main__':
  175.     _test()
  176.  
  177.